package org.linlinjava.litemall.db.dao;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.linlinjava.litemall.db.domain.UserAccountBinding;
import java.util.List;

@Mapper
public interface UserAccountBindingMapper {
    
    /**
     * 根据主键查询绑定关系
     */
    UserAccountBinding selectByPrimaryKey(Long id);

    /**
     * 根据LiteMall用户ID查询绑定关系
     */
    List<UserAccountBinding> selectByLitemallUserId(@Param("litemallUserId") Integer litemallUserId);

    /**
     * 根据AMSP用户代码查询绑定关系
     */
    List<UserAccountBinding> selectByAmspUserCode(@Param("amspUserCode") String amspUserCode);

    /**
     * 根据AMSP用户ID查询绑定关系
     */
    List<UserAccountBinding> selectByAmspUserId(@Param("amspUserId") Integer amspUserId);

    /**
     * 查询指定用户的有效绑定关系(已绑定状态)
     */
    UserAccountBinding selectActiveBoundByLitemallUserId(@Param("litemallUserId") Integer litemallUserId);

    /**
     * 查询指定AMSP用户的有效绑定关系(已绑定状态)
     */
    UserAccountBinding selectActiveBoundByAmspUserCode(@Param("amspUserCode") String amspUserCode);

    /**
     * 查询指定用户对和状态的绑定关系
     */
    UserAccountBinding selectByLitemallUserIdAndAmspUserCode(
            @Param("litemallUserId") Integer litemallUserId,
            @Param("amspUserCode") String amspUserCode
    );

    /**
     * 插入新的绑定关系
     */
    int insert(UserAccountBinding record);

    /**
     * 选择性插入绑定关系
     */
    int insertSelective(UserAccountBinding record);

    /**
     * 根据主键更新绑定关系
     */
    int updateByPrimaryKey(UserAccountBinding record);

    /**
     * 根据主键选择性更新绑定关系
     */
    int updateByPrimaryKeySelective(UserAccountBinding record);

    /**
     * 绑定账户 - 更新绑定状态为已绑定
     */
    int bindAccount(@Param("id") Long id, @Param("amspUserId") Integer amspUserId);

    /**
     * 解绑账户 - 更新绑定状态为已解绑
     */
    int unbindAccount(@Param("id") Long id);

    /**
     * 根据主键删除绑定关系
     */
    int deleteByPrimaryKey(Long id);

    /**
     * 条件查询绑定关系列表(支持分页)
     */
    List<UserAccountBinding> selectSelective(
            @Param("litemallUserId") Integer litemallUserId,
            @Param("amspUserCode") String amspUserCode,
            @Param("amspUserId") Integer amspUserId,
            @Param("bindingStatus") Integer bindingStatus
    );

    /**
     * 统计绑定关系数量
     */
    long countSelective(
            @Param("litemallUserId") Integer litemallUserId,
            @Param("amspUserCode") String amspUserCode,
            @Param("amspUserId") Integer amspUserId,
            @Param("bindingStatus") Integer bindingStatus
    );

    /**
     * 批量解绑指定LiteMall用户的所有账户
     */
    int batchUnbindByLitemallUserId(@Param("litemallUserId") Integer litemallUserId);

    /**
     * 批量解绑指定AMSP用户代码的所有账户
     */
    int batchUnbindByAmspUserCode(@Param("amspUserCode") String amspUserCode);
} 